//
//  DOMXMLHandler.m
//  UI19_网络数据解析
//
//  Created by 李劲成 on 16/4/5.
//  Copyright © 2016年 ljc. All rights reserved.
//

#import "DOMXMLHandler.h"
#import "GDataXMLNode.h"
#import "ModelStudent.h"
@interface DOMXMLHandler ()

@property (nonatomic, retain) NSMutableArray *marr;

@end
@implementation DOMXMLHandler
#pragma mark - 知识点3 DOM方式解析XML数据
/**
 * @brief 讲解:
 *
 * DOM:Document Object Model (文档对象模型).
 *
 * 解析时需要将XML文件整体读入, 并且将XML结构化成树状, 使用时再通过树状结构读取相关数据
 *
 * 使用的类是第三方类:GDataXMLNode
 * Google提供的开源XML解析类, 对libxml2.dylib 进行了Objective-C的封装
 * 采用DOM方式解析数据
 *
 * iOS 中包含一个C语言的动态链接库 libxml2.dylib , 解析速度比NSXMLParse快.
 *
 *
 * 进入Build Settings 里面找到Search Paths 然后修改Header Search Paths, 在debug中添加一项
 $(SDKROOT)/usr/include/libxml2
 * 同时在Build Phases 的framework中导入 libxml2.lib
 */



+ (NSArray *)domXMLParserWithFileName:(NSString *)name fileType:(NSString *)type{
    DOMXMLHandler *domXMLHandler = [[[DOMXMLHandler alloc]init]autorelease];
    domXMLHandler.marr = [NSMutableArray array];
    /* DOM 解析: 按节点解析 */
    /* 1. 获取xml文件 */
    NSString *filePath = [[NSBundle mainBundle]pathForResource:name ofType:type];
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    /* 2. 创建GDataXMLDocument对象 */
    NSError *error = nil; /* 错误信息 */
    // core API.
    GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:1 error:&error];
    /* 3. 获取根节点 */
    GDataXMLElement *root = document.rootElement;
    /* 4. 找子节点
     *  将所有叫 student 的节点放到一个数组中
     */
    // 在根节点下找到所有的 student 的节点.
    NSArray * arr = [root  elementsForName:@"student"];
    /* 对student数组进行遍历 */
    for (GDataXMLElement *element in arr) {
        ModelStudent *model = [[ModelStudent alloc]init];
        model.name = [[[element elementsForName:@"name"]lastObject] stringValue];
        model.sex = [[[element elementsForName:@"sex"] lastObject] stringValue];
        model.age = [[[element elementsForName:@"age"] lastObject] stringValue].intValue;
        [domXMLHandler.marr addObject:model];
        [model release];
    }
    return domXMLHandler.marr;
}
@end
